perm filename UDPNEW.FAI[OLD,LCS] blob sn#088114 filedate 1974-02-21 generic text, type T, neo UTF8
00100		TITLE	UDPLA  ;  WITH SPACEWAR, OCT. 1970. 
00200	
00300	;  ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400	;  PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500	;  
00600	;   READS FROM UDP DATA WRITTEN WITH 'CONVRT',  THE FIRST RECORD OF WHICH 
00700	;   CONTAINS THE NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00800	;   IF 'BLKS' IS CHANGED, ALSO CHANGE IT IN 'CONVRT'.
00900	
01000	A   ←   1     ;WORK
01100	B   ←   2     ;WORK
01200	RET ←   3     ;RETURN ACCUMULATOR
01300	
01400	;** CHANGE NEXT TO 14 FOR 'UDPBIG' (TO PLAY AT HIGH SRATES-DOUBLES CORE)
01500	BLKS ← =14
01600	
01700	;**** 1312 IS FOR 2314 DSK.  CHANGE NUMBER IF NEEDED FOR 3330 DSK. *****
01800	BUFSIZ ←(=128*=18+=32)*BLKS
01900	
02000	↓DSKCHN ←1             ;DISK CHANNEL FOR INPUT
02100	↓ADCHN  ←2             ;D-A CHANNEL FOR OUTPUT
02200	
02300		OPDEF	READCH [51B8]
02400	        OPDEF   MESSAGE[51B8!3B12]
02500	
02600	BEG:	CALLI	0,0         ;RESET I/O DEVICES
02700	 	OPEN 	DSKCHN,[17  ;MODE
02800			'UDP   '    ;DEVICE NAME
02900	 		0]          ;NO BUFFER HEADERS
03000		HALT	BEG         ;RESTART IF DEVICE IS UNAVAILABLE
03100		ENTER	DSKCHN,[0
03200			0
03300			0
03400			0]
03500		HALT 	BEG	;FOR NEW UDP CODE
03600	
03700		;FIND OUT NUMBER OF CHANNELS AND
03800		;THE SPEED.
03900	
04000		MESSAGE	[ASCIZ/HOW MANY CHANNELS? /]
04100		READCH	A
04200		SUBI	A,"0"+1		;CONVERT TO BINR AND ADD 1
04300		DPB	A,[POINT 2,OUTBIT,26]
04400	
04500		MESSAGE [ASCIZ/ WHAT IS THE SPEED? /]
04600		READCH  A
04700		SUBI	A,"0"
04800		DPB	A,[POINT 3,OUTBIT,32]
04900	
05000	LX:	MESSAGE [ASCIZ/
05100	  TYPE `P' TO PLAY.
05200	/]
05300		readch a
05400		caie a,"P"
05500		jrst lx
05600		MOVEI A,1
05700		MOVEM A,BLKNUM
05800	PLA2:	SPCWAR 17,[CALLI]
05900		MESSAGE [ASCIZ/ GO? /]
06000		READCH A
06010	XOPEN:	MOVSI	'XGP'	;DOWN TO XGPOK FOR XGP CONFLICT.
06020		DEVUSE	0,	
06030		HLRZ 	0,0
06040		CAIN	400000
06050		JRST	XGPOK
06060		INIT	16,17
06070		SIXBIT	.XGP.
06080		0
06090		JRA	16,2(16)
06100	XGPOK:	OPEN	ADCHN,[117 	;MODE
06200	         	'AD    '        ;DEVICE NAME
06300	 		0]              ;NO BUFFER HEADERS
06400	
06500	  	JRST	[MESSAGE[ASCIZ/
06600			***D-A NOT AVAILABLE/]
06700			CALLI  12]
06800		;EXIT IF D-A IS UNAVAILABLE
06900	
07000	
07100		INPUT DSKCHN,[IOWD 1,NWD
07200		               0 ]
07300	
07400	;	-----------------------------------------
07500	
07600		;BEGIN MAIN BODY OF PROGRAM
07700	
07800	LOOP:	JSP	RET,SUB		;ROUTINE TO READ AND WRITE
07900		BUF1-1 			;USE BUF1 FOR THE I/O
08000		JUMPLE	B,OUT    	;DONE
08100		
08200		JSP	RET,SUB		;CALL IT AGAIN
08300		BUF2-1			;USE BUF2 FOR THE I/O
08400		JUMPG	B,LOOP		;GO BACK FOR MORE IF B>0
08500	
08600	OUT:	close dskchn,		;END OF PROGRAM.
08700		releas adchn,
08800		SPCWAR 0,'SSW'
08810		RELEASE 16,
08900		jrst lx
09000	
09100		;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
09200		;  1(RET) WILL BE THE RETURN
09300		;  0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
09400		;         PUT IN THE RIGHT HALF OF THE IOWD.
09500		;  A      WILL BE A WORK REGISTER
09600	    	;  B      WILL BE TESTED ON THE OUTSIDE.
09700	
09800	SUB:	MOVNI	A,BUFSIZ	;PICK UP AND COMPLEMENT BUFSIZ
09900		ADDB	A,NWD		;A←NWD-BUFSIZ
10000					;NWD←NWD-BUFSIZ
10100		MOVE	B,A		;SAVE B TO BE TESTED FOR LAST
10200					;TIME.
10300		JUMPLE	A,LAST		;SET UP FOR LAST TIME.
10400		MOVEI	A,0		
10500	
10600		;THE IOWD LOOKS LIKE:
10700		;  [-BUFSIZ / BUFI-1]
10800	
10900	LAST:	ADDI	A,BUFSIZ
11000		MOVNS	A		;COMPLEMENT A
11100		HRL	A,0(RET)	;PICK UP BUFI AND MOVE IT
11200					;TO THE LEFT SIDE OF A.
11300		MOVSM	A,INLIST	;SWAP A AND MOVE IT.
11400		MOVSM	A,OUTWC		;SAME FOR OUTPUT.
11500		INPUT	DSKCHN,INLIST	;READ A RECORD.
11600		MOVEI A,BLKS
11700		ADDM A,BLKNUM
11800		OUTPUT	ADCHN,OUTWC	;WRITE THE RECORD.
11900		JRST	1(RET)		;RETURN
12000	
12100	;	-----------------------------------------
12200	
12300	; STORAGE:
12400	
12500	NWD:	0			;FOR NUMBER OF WORDS OF INPUT.
12600		0
12700	↓BUF1:	BLOCK	BUFSIZ+1	;BUFFER 1
12800	BUF2:	BLOCK	BUFSIZ+1	;BUFFER 2
12900	
13000	CLIST:	IOWD	1,NWD		;FOR THE FIRST RECORD
13100		0
13200	
13300	INLIST:	0			;WILL CONTAIN AN IOWD
13400	BLKNUM:	0
13500	
13600	OUTWC:	0			;WILL CONTAIN AN IOWD FOR D-A
13700		3650			;MAGIC BITS FOR 136.
13800	OUTBIT: 4000			;BITS FOR D-A
13900		BLOCK  2
14000	end beg